class Solution {
public:
    int solve(string nums) {
        int n = nums.size();
        if (n == 0) return 0;  // 空字符串无法解码

        //dp[i]代表从0到i位置的数字能够译码的总结果数量
        int dp[n + 1];
        memset(dp, 0, sizeof(dp));
        dp[0] = 1;  // 空字符串的解码方式为1
        dp[1] = (nums[0] != '0') ? 1 : 0;  // 单个字符的解码方式

        for (int i = 2; i <= n; i++) {
            // 检查当前字符是否可以单独解码
            if (nums[i - 1] != '0') {
                dp[i] += dp[i - 1];
            }

            // 检查是否可以与前一个字符组合解码
            int two_digit = (nums[i - 2] - '0') * 10 + (nums[i - 1] - '0');
            if (nums[i - 2] != '0' && two_digit >= 10 && two_digit <= 26) {
                dp[i] += dp[i - 2];
            }
        }

        return dp[n];
    }
};